/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/** Kingipüüdja
 *
 * @author Sirli, Raido, Argo
 */
import java.util.*;
import javax.microedition.lcdui.*;

class Louend extends Canvas implements CommandListener{
    Timer t;
    Random rand = new Random();
    int koord_X = getWidth()/2;
    int koord_Y = getHeight()/2;
    int suund = 0, suund1 = 0, suund2 = 0;
    int x = -10, y = (getHeight()/2)-50;
    int kink0 = 0, kink1 = 0, kink2 = 0, kink3 = 0, kink4 = 0;
    int[] kink = {0, 0, 0, 0, 0};
    static int kinkidearv_konstant = 5, kingivahe_konstant = 40, kingivahe = 5, mitu = 1, kiirus = 3;
    static int[][] kingiandmed = new int[5][3];
    int i;
    int lint = 0;
    int kiiruse_lisaja = 0, kingi_lisaja = 0, kinke_lisatud = 0;
    static int punktid = 0, elud = 5;
    static int kiiruse_suurendamise_konstant = 20, kingi_lisaja_konstant = 5;
    private Command cmExit,cmPaus,cmStart;  // Exit midlet
    private Joonistus midlet;
    static Image pyydja_keskel = null, pyydja_parem = null, pyydja_vasak = null;
    static Image kingipakk = null, kink_katki = null;
    static Image l_v_1 = null, l_v_2 = null, l_p_1 = null, l_p_2 = null;

    public Louend(Joonistus midlet){
        this.midlet = midlet;

        // Create exit command & listen for events
        cmExit = new Command("Välju", Command.EXIT, 1);
        cmPaus = new Command("Peata", Command.ITEM, 1);
        cmStart = new Command("Jätka", Command.ITEM, 1);
        addCommand(cmExit);
        addCommand(cmPaus);
        setCommandListener(this);
        try{
            pyydja_keskel = Image.createImage("/t.k.png");
            pyydja_parem = Image.createImage("/t.p.png");
            pyydja_vasak = Image.createImage("/t.v.png");
            kingipakk = Image.createImage("/kink.png");
            kink_katki = Image.createImage("/kink_katki.png");
            l_v_1 = Image.createImage("/l.v.1.png");
            l_v_2 = Image.createImage("/l.v.2.png");
            l_p_1 = Image.createImage("/l.p.1.png");
            l_p_2 = Image.createImage("/l.p.2.png");

        } catch (java.io.IOException e){
            System.err.println("Unable to locate or read .png file");
        }
    }

    protected void paint(Graphics g){

        g.setColor(255, 250, 250);
        g.setStrokeStyle(Graphics.DOTTED);
        g.drawImage(Intro.taust, koord_X, koord_Y, Graphics.HCENTER| Graphics.VCENTER );
        if(lint == 0){
            lint = 1;
            g.drawImage(l_v_1, koord_X-40, koord_Y-10, Graphics.RIGHT| Graphics.TOP );
            g.drawImage(l_p_1, koord_X+40, koord_Y-10, Graphics.LEFT| Graphics.TOP );
        }
        else{
            g.drawImage(l_v_2, koord_X-40, koord_Y-10, Graphics.RIGHT| Graphics.TOP );
            g.drawImage(l_p_2, koord_X+40, koord_Y-10, Graphics.LEFT| Graphics.TOP );
            lint = 0;
        }

        for(i=0; i<kinkidearv_konstant; i++){
            if(kink[i]==1){
                g.drawImage(kingipakk, kingiandmed[i][1], kingiandmed[i][2], Graphics.HCENTER| Graphics.BOTTOM);
            }
            if(kink[i]==0 && kingiandmed[i][2] >= koord_Y+85){
                g.drawImage(kink_katki, kingiandmed[i][1], kingiandmed[i][2], Graphics.HCENTER| Graphics.BOTTOM);
            }
        }
        if (pyydja_keskel != null && suund == 0){
            g.drawImage(pyydja_keskel, koord_X, koord_Y+80, Graphics.HCENTER | Graphics.BOTTOM );
        }
        else if (pyydja_parem != null && suund == 1){
            g.drawImage(pyydja_parem, koord_X, koord_Y+80, Graphics.HCENTER  | Graphics.BOTTOM );
        }
        else if (pyydja_vasak != null && suund == -1){
            g.drawImage(pyydja_vasak, koord_X, koord_Y+80, Graphics.HCENTER  | Graphics.BOTTOM );
        }
        int elunaitaja_asukoht = 20;
       for(i=0; i<elud; i++){
            g.drawImage(kingipakk, elunaitaja_asukoht, 30, Graphics.HCENTER  | Graphics.BOTTOM );
            elunaitaja_asukoht += 20;
        }
        g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
        g.drawString("Kinke: " + punktid, 14, 36, Graphics.TOP | Graphics.LEFT);
    }


    protected void keyPressed(int kood){
        if(getGameAction(kood)==Canvas.LEFT){
            suund = -1;
            suund1 = 1;
        }
        if(getGameAction(kood)==Canvas.RIGHT){
            suund = 1;
            suund2 = 1;
        }
    }
    
    protected void keyReleased(int kood){
        if(getGameAction(kood)== Canvas.LEFT){
            if(suund2 == 1){suund = 1;}
            else{suund = 0;}
            suund1 = 0;
        }
        if(getGameAction(kood)== Canvas.RIGHT){
            if(suund1 == 1){suund = -1;}
            else{suund = 0;}
            suund2 = 0;
        }
    }

    protected void pointerPressed(int x, int y)
      {
        if(x <= koord_X){

            suund = -1;
            suund1 = 1;
        }
        if(x >= koord_X){
            suund = 1;
            suund2 = 1;
        }
      }

     protected void pointerDragged(int x, int y)
      {
        if(x <= koord_X){
            suund = -1;
            suund1 = 1;
        }
        if(x >= koord_X){
            suund = 1;
            suund2 = 1;
        }
      }

 public void pointerReleased (int x, int y) {
        this.x = x;
        this.y = y;
        suund=0;
        suund1=0;
        suund2=0;
        repaint ();
  }

  
    public void showNotify(){
        t=new Timer();
        TimerTask tt=new TimerTask(){
            public void run(){
                liigu();
           }
        };
        t.schedule(tt, 500, 100); //tegevus, viivitus, intervall
    }

    private void stopTimer() {
        if (t != null) {
            t.cancel();
        }
    }
    
    public void hideNotify(){
        t.cancel();
    }

    void liigu(){
        if(mitu != 0){
            for(i=0; i<kinkidearv_konstant; i++){
                kingivahe = kingivahe + kiirus;
                if(kink[i] == 0){
                    if(rand.nextInt(2) == 1 && kingivahe >= kingivahe_konstant){
                        if(rand.nextInt(2) == 0){
                            kingiandmed[i][0] = 0;
                            kingiandmed[i][1] = -20;
                            kingiandmed[i][2] = koord_Y-5;
                        }
                        else{
                            kingiandmed[i][0] = 1;
                            kingiandmed[i][1] = getWidth()+20;
                            kingiandmed[i][2] = koord_Y-5;
                        }
                        kink[i] = 1;
                        mitu--;
                        kingivahe = 0;
                    }
                    break;
                }
            }
        }
        for(i=0; i<kinkidearv_konstant; i++){
            if(kink[i] == 1){
                if(kingiandmed[i][1] >= (getWidth()/2)-45 && kingiandmed[i][1] <= (getWidth()/2)+45){
                    kingiandmed[i][2] = kingiandmed[i][2] + 15;
                    if(kingiandmed[i][2] >= koord_Y+30 && kingiandmed[i][2] <= koord_Y+40 && kingiandmed[i][0] == 0 && suund == -1 || kingiandmed[i][2] >= koord_Y+30 && kingiandmed[i][2] <= koord_Y+40 && kingiandmed[i][0] == 1 && suund == 1){
                        kink[i] = 0;
                        mitu ++;
                        punktid ++;
                        kiiruse_lisaja ++;
                        kingi_lisaja ++;
                        if(kiiruse_lisaja == kiiruse_suurendamise_konstant){
                            kiiruse_lisaja = 0;
                            kiiruse_suurendamise_konstant = kiiruse_suurendamise_konstant * 2;
                            kiirus = kiirus+1;
                        }
                        if(kingi_lisaja == kingi_lisaja_konstant && kinke_lisatud <= 4){
                            kingi_lisaja = 0;
                            kingi_lisaja_konstant = kingi_lisaja_konstant * 2;
                            kinke_lisatud ++;
                            mitu ++;
                        }
                    }
                    else if(kingiandmed[i][2] >= koord_Y+85){
                        kink[i] = 0;
                        mitu ++;
                        elud --;
                        if(elud <= 0){
                            suund = 0; suund1 = 0; suund2 = 0;
                            x = -10; y = (getHeight()/2)-50;
                            kink0 = 0; kink1 = 0; kink2 = 0; kink3 = 0; kink4 = 0;
                            kiiruse_lisaja = 0; kingi_lisaja = 0; kinke_lisatud = 0;
                            mitu=1;
                            koord_X = getWidth()/2;
                            koord_Y = getHeight()/2;
                            for(i=0; i<kinkidearv_konstant; i++){
                                kingiandmed[i][0]=0;
                                kingiandmed[i][1]=0;
                                kingiandmed[i][2]=0;
                                kink[i]=0;
                                kiirus=3;
                            }
                            midlet.display.setCurrent(midlet.theend);
                            
                        }
                    }
                }
                else{
                    if(kingiandmed[i][0] == 0){
                        kingiandmed[i][1] = kingiandmed[i][1] + kiirus;
                    }
                    else{
                        kingiandmed[i][1] = kingiandmed[i][1] - kiirus;
                    }
                }
            }
        }
        repaint();
       // System.out.println(mitu);
    }

    public void commandAction(Command c, Displayable d){
        if (c == cmExit){
            midlet.exitMIDlet();
        }if (c == cmPaus){
            removeCommand(cmPaus);
            addCommand(cmStart);
            stopTimer();
        }if (c == cmStart){
            removeCommand(cmStart);
            addCommand(cmPaus);
            showNotify();
        }
    }
}